package com.newstore.classes;

import java.util.Random;

import android.content.Context;
import android.graphics.Typeface;
import android.util.Log;
import android.widget.TextView;

import com.newstore.androidean13.EAN13CodeBuilder;

/**
 * <p>Code barres qui respecte la norme EAN 13
 * Les produits de Newstore comprendront donc l’EAN Code suivant :
 * 978-10-42-xxxxx </p>
 * <p>	
 * 978, c’est une norme.
 * 10 représente la France (ou 2 pour les pays francophones).
 * 42 identifie l’entreprise qui participe à l’ISBN, ici Newstore (a fortiori c’est la réponse à la grande question sur la vie, l'univers et le reste).
 * xxxxx étant la référence du produit ou de la commande.</p>
 * <p>
 * Premier chiffre du quatrième numéro du code-barres : 0-4 = commande, 5-9 = produit </p>
 * @author Guillaume
 * @version 1.0
 */
public class Barcode
{
	public static final int numberPrefix = 978;
	public static final int numberSecond = 10;
	public static final int numberThird = 42;
	private int id;
	private int prefixElement;
	private int secondElement;
	private int thirdElement;
	private int fourthElement;
	
	public int getId()
	{
		return id;
	}
	public void setId(int id)
	{
		this.id = id;
	}
	public int getPrefixElement()
	{
		return prefixElement;
	}
	public void setPrefixElement(int prefixElement)
	{
		this.prefixElement = prefixElement;
	}
	public int getSecondElement()
	{
		return secondElement;
	}
	public void setSecondElement(int secondElement)
	{
		this.secondElement = secondElement;
	}
	public int getThirdElement()
	{
		return thirdElement;
	}
	public void setThirdElement(int thirdElement)
	{
		this.thirdElement = thirdElement;
	}
	public int getFourthElement()
	{
		return fourthElement;
	}
	public void setFourthElement(int fourthElement)
	{
		this.fourthElement = fourthElement;
	}
	
	
	public Barcode(int prefixElement, int secondElement, int thirdElement)
	{
		this.prefixElement = prefixElement;
		this.secondElement = secondElement;
		this.thirdElement = thirdElement;
	}
	
	public Barcode(String stringBarcode)
	{
		this.prefixElement = Integer.parseInt(stringBarcode.substring(0, 3));
		this.secondElement = Integer.parseInt(stringBarcode.substring(3, 5));
		this.thirdElement = Integer.parseInt(stringBarcode.substring(5, 7));
		this.fourthElement = Integer.parseInt(stringBarcode.substring(7, 12));
	}
	
	public Barcode(int prefixElement, int secondElement, int thirdElement,
			int fourthElement)
	{
		this.prefixElement = prefixElement;
		this.secondElement = secondElement;
		this.thirdElement = thirdElement;
		this.fourthElement = fourthElement;
	}

	public Barcode(int id, int prefixElement, int secondElement,
			int thirdElement, int fourthElement)
	{
		this.id = id;
		this.prefixElement = prefixElement;
		this.secondElement = secondElement;
		this.thirdElement = thirdElement;
		this.fourthElement = fourthElement;
	}
	
	public Barcode(int fourthElement)
	{
		this.prefixElement = numberPrefix;
		this.secondElement = numberSecond;
		this.thirdElement = numberThird;
		this.fourthElement = fourthElement;
	}
	
	public Barcode()
	{
		// TODO Auto-generated constructor stub
	}
	public long concatenationEANCode()
	{
		String EANCodeString = String.valueOf(this.prefixElement) + String.valueOf(this.secondElement) + String.valueOf(this.thirdElement) + String.valueOf(this.fourthElement);
		return Long.parseLong(EANCodeString);
	}
	
	// A voir quoi renvoyer
	public String generateBarcode(Context context, TextView textView)
	{
		Typeface font = Typeface.createFromAsset(context.getAssets(), "fonts/eanp72.ttf");
		textView.setTypeface(font);
		textView.setTextSize(190);
		EAN13CodeBuilder bb = new EAN13CodeBuilder(String.valueOf(this.prefixElement) + String.valueOf(this.secondElement) + String.valueOf(this.thirdElement) + String.valueOf(this.fourthElement));
		textView.setText(bb.getCode());
		
		return bb.getCode();
	}
	
	public String toString()
	{
		return ""+ this.prefixElement + this.secondElement + this.thirdElement + this.fourthElement;
	}
	
	/**
	 * Génération des numéros du code barre pour un produit ou une commande
	 * @param idElement Id de l'élément à générer
	 * @param orderOrProduct Booléen à true si order et false si product
	 */
	public void generateBarcodeNumber(int idElement, boolean orderOrProduct)
	{
		this.prefixElement = numberPrefix;
		this.secondElement = numberSecond;
		this.thirdElement = numberThird;
		String fourthElement = "";
		Random random = new Random();
		if (orderOrProduct)
			fourthElement += random.nextInt(5);
		else 
			fourthElement += (random.nextInt(5) + 5);
		if (idElement < 10)
			fourthElement += "000";
		else if (idElement < 100)
			fourthElement += "00";
		else if (idElement < 1000)
			fourthElement += "0";
		fourthElement += idElement;
		
		this.fourthElement = Integer.parseInt(fourthElement);
		Log.i("barcode", prefixElement + " " + secondElement + " " + thirdElement + " " + fourthElement);
	}
	
}
